
1000 '* NUGI.COM MAIN Ver.1.10
1010 '* 6809 ASSEMBLER-AD / ARTDINK
1020 '
1030 '       ORG  $6B00         ; RELOCATABLE
1040 '       OPT  M
1050 '
1060 'FILNUM EQU  $00BF         ; FILE NUMBER
1070 'DATEND EQU  $00C0         ; READ DATA END FLAG
1080 'GRDPTR EQU  $00D9         ; GENERAL PURPOSE READ POINTER
1090 'FILTYP EQU  $02DB         ; FILE TYPE
1100 'ASCFLG EQU  $02DC         ; ASCII FLAG
1110 'CSTBUF EQU  $05ED         ; CASSETE BUFFER
1120 'ERRPRC EQU  $FBC4         ; ERROR PROCESS ROUTINE
1130 'SETFND EQU  $FBD6         ; SET FILE NAME AND DEVICE NUMBER
1140 'OPENRD EQU  $FBDC         ; FILE OPEN (READ MODE)
1150 'FCLOSE EQU  $FBB2         : FILE CLOSE
1160 'READ1B EQU  $D072         ; READ 1 BYTE FROM FILE
1170 'FILCHK EQU  $D0ED         ; FILE CHECK ROUTINE
1180 'KEYCD  EQU  $FD01         ; KEY CODE
1190 'IRQMSK EQU  $FD02         ; IRQ MASK
1200 'IRQFLG EQU  $FD03         ; IRQ FLAG
1210 'SBSTAT EQU  $FD05         ; SUB-SYSTEM STATUS
1220 'BANKRG EQU  $FD0F         ; SELECT ROM / RAM MODE 
1230 'MLTPAG EQU  $FD37         ; MULTI PAGE CONTROL REGISTER
1240 'PALREG EQU  $FD38         ; PALETTE REGISTER
1250 'SRAM   EQU  $FC80         ; MAIN-SYSTEM SIDE SHARE MEMORY
1260 'SRAMCD EQU  SRAM+2
1270 'IRQVCT EQU  $FFF8         ; IRQ VECTOR
1280 'VRAMAC EQU  $D409         ; VRAM ACCESS FLAG
1290 'CONBUF EQU  $C000         ; SUB-SYSTEM CONSOL BUFFER
1300 'TRSIZE EQU  $0064         ; SIZE OF TRANSFER
1310 'SSRAM  EQU  $D380         ; SUB-SYSTEM SIDE SHARE MEMORY 
1320 'SSRAMC EQU  SSRAM+2
1330 'INSFLG EQU  $D40D         ; LED CONTROL
1340 'BSYFLG EQU  $D40A         ; SUB-SYSTEM BUSY FLAG
1350 'STACK  EQU  $CFA0         ; SUB-SYSTEM HARDWARE STACK AREA
1360 'CMDCTL EQU  $E034         ; SUB-SYSTEM COMMAND HADLER
1370 'SUBWRK EQU  $D0A0         ; SUB-SYSYEM SUB WORK AREA
1380 'IMAGE1 EQU  $8000         ; IMAGE DATA 1
1390 'IMAGE2 EQU  $1300         ; IMAGE DATA 2
1400 'PTNNUM EQU  $F4B0         ; NUMBER OF PATTERN
1410 'PTNTBL EQU  $F4B1         ; PATTERN TABLE
1420 'IRMSKC EQU  $50           ; FIRQ, IRQ MASK CODE
1430 'IRENBC EQU  $EF           ; FIRQ MASK, IRQ ENABLE CODE
1440 'DEFSPD EQU  60            ; DEFAULT SPEED
1450 '
1460 '******** MAIN
1470 'ENTRY  EQU  *
1480 '       LBSR LODIMG        ; LOAD IMAGE DATA
1490 '       LBSR SUBTRF        ; SUB PROGRAM TRANSFER
1500 '       LBSR SUBEXE        ; SUB PROGRAM EXECUTE
1510 '       LBSR INIT          ; INITIALIZE
1520 '       LBSR CLS           ; CLEAR SCREEN
1530 'MAINLP LDA  <ENDFLG,PCR   ; WAIT LOOP
1540 '       BEQ  MAINLP
1550 '       LBSR SCLOSE        ; SUB PROGRAM CLOSE
1560 '       LBSR PCLOSE        ; PROGRAM CLOSE
1570 'MEND   RTS
1580 '
1590 '******** IRQ PROCEDURE
1600 'IRQPRC EQU  *
1610 '       ORCC #IRMSKC       ; FIRQ,IRQ MASK
1620 '       LDA  IRQFLG        ; READ IRQ FLAG
1630 '       BITA #$01          ; CHECK KEY IRQ FLAG
1640 '       BNE  IRQJP1
1650 '       BSR  KEYIRQ        ; CALL KEY IRQ SUBROUTINE
1660 'IRQJP1 BITA #$04          ; CHECK TIMER IRQ FLAG
1670 '       BNE  IRQJP2
1680 '       TST  <PAUFLG,PCR
1690 '       BNE  IRQJP2
1700 '       BSR  TIMIRQ        ; CALL TIMER IRQ SUBROUTINE
1710 'IRQJP2 ANDCC #IRENBC      ; FIRQ MASK, IRQ ENABLE
1720 '       RTI
1730 '
1740 '******** KEY IRQ PROCEDURE
1750 'KEYIRQ EQU  *
1760 '       PSHS A
1770 '       LDA  KEYCD         ; READ KEY CODE (CANCEL KEY IRQ)
1780 '       TST  <PAUFLG,PCR
1790 '       BNE  STEP
1800 '       CMPA #$1B
1810 '       BEQ  PAUSE
1820 '       CMPA #$1C
1830 '       BEQ  QUICK
1840 '       CMPA #$1D
1850 '       BEQ  SLOW
1860 '       COM  <ENDFLG,PCR   ; SET END FLAG
1870 'KIRQRT PULS A,PC
1880 '
1890 'PAUSE  EQU  *
1900 '       COM  <PAUFLG,PCR
1910 '       BRA  KIRQRT
1920 '
1930 'STEP   EQU  *
1940 '       CMPA #$1B
1950 '       BNE  PAUSE
1960 '       BSR  DRAW
1970 '       BRA  KIRQRT
1980 '
1990 'QUICK  EQU  *
2000 '       DEC  <SETCNT,PCR
2010 '       BNE  KIRQRT
2020 '       INC  <SETCNT,PCR
2030 '       BRA  KIRQRT
2040 '
2050 'SLOW   EQU  *
2060 '       INC  <SETCNT,PCR
2070 '       BNE  KIRQRT
2080 '       DEC  <SETCNT,PCR
2090 '       BRA  KIRQRT
2100 '
2110 '******** TIMER IRQ PROCEDURE
2120 'TIMIRQ EQU  *
2130 '       PSHS A
2140 '       LDA  <TIMCNT,PCR
2150 '       INCA
2160 '       CMPA <SETCNT,PCR
2170 '       BLO  TIMJP1
2180 '       BSR  DRAW
2190 '       CLRA
2200 'TIMJP1 STA  <TIMCNT,PCR
2210 '       PULS A,PC
2220 '
2230 '******** WORK AREA
2240 'ENDFLG FCB  $00           ; PROGRAM END FLAG
2250 'PAUFLG FCB  $00           ; PAUSE FLAG
2260 'TIMCNT FCB  $00           ; TIMER COUNTER
2270 'SETCNT FCB  DEFSPD        ; SET COUNTER (2.03ms x T)
2280 'ORGIRQ FDB  $0000         ; ORIGINAL IRQ VECTOR
2290 'PTNCNT FCB  0             ; PATTERN COUNT
2300 '
2310 '******** DRAW SUBROUTINE
2320 'DRAW   EQU  *
2330 '       PSHS D,X,Y,U
2340 '       LEAX PTNTBL,PCR
2350 '       LDA  <PTNCNT,PCR
2360 '       ASLA
2370 '       LDD  A,X
2380 '       LEAX D,X
2390 '       LDA  ,X
2400 '       SUBA #$43
2410 '       ASLA
2420 '       LEAU <DRWTBL,PCR
2430 '       LDD  A,U
2440 '       JSR  D,U
2450 '       LDA  <PTNCNT,PCR
2460 '       INCA
2470 '       CMPA PTNNUM,PCR
2480 '       BNE  DRAWJP
2490 '       CLRA
2500 'DRAWJP STA  <PTNCNT,PCR
2510 '       PULS D,X,Y,U,PC
2520 '
2530 'DRWTBL EQU  *
2540 '       FDB  DRAW03-DRWTBL
2550 '       FDB  DRAW04-DRWTBL
2560 '       FDB  MEND-DRWTBL
2570 '       FDB  DRAW06-DRWTBL
2580 '       FDB  DRAW07-DRWTBL
2590 '       FDB  DRAW08-DRWTBL
2600 '       FDB  DRAW09-DRWTBL
2610 '       FDB  DRAW10-DRWTBL
2620 '
2630 '******** DRAW 3 BYTE COMMAND
2640 'DRAW03 EQU  *
2650 '       LDD  ,X++
2660 '       LDU  ,X++
2670 '       PSHS D
2680 'D03LP1 LBSR SUBHLT
2690 '       LDA  ,S
2700 '       STA  SRAMCD
2710 '       LDB  ,X+
2720 '       STB  SRAMCD+1
2730 '       LDY  ,X++
2740 '       STY  SRAMCD+2
2750 '       PSHS B,X
2760 '       LDY  #SRAMCD+4
2770 'D03LP2 PULU A,X
2780 '       STA  ,Y+
2790 '       STX  ,Y++
2800 '       DEC  ,S
2810 '       BNE  D03LP2
2820 '       PULS B,X
2830 '       CLR  SBSTAT
2840 '       DEC  1,S
2850 '       BNE  D03LP1
2860 '       PULS D,PC
2870 '
2880 '******** DRAW 4 BYTE COMMAND
2890 'DRAW04 EQU  *
2900 '       LDD  ,X++
2910 '       LDU  ,X++
2920 '       PSHS D
2930 'D04LP1 LBSR SUBHLT
2940 '       LDA  ,S
2950 '       STA  SRAMCD
2960 '       LDB  ,X+
2970 '       STB  SRAMCD+1
2980 '       LDY  ,X++
2990 '       STY  SRAMCD+2
3000 '       PSHS B,X
3010 '       LDY  #SRAMCD+4
3020 'D04LP2 PULU D,X
3030 '       STD  ,Y++
3040 '       STX  ,Y++
3050 '       DEC  ,S
3060 '       BNE  D04LP2
3070 '       PULS B,X
3080 '       CLR  SBSTAT
3090 '       DEC  1,S
3100 '       BNE  D04LP1
3110 '       PULS D,PC
3120 '
3130 '******** DRAW 6 BYTE COMMAND
3140 'DRAW06 EQU  *
3150 '       LDD  ,X++
3160 '       LDU  ,X++
3170 '       PSHS D
3180 'D06LP1 LBSR SUBHLT
3190 '       LDA  ,S
3200 '       STA  SRAMCD
3210 '       LDB  ,X+
3220 '       STB  SRAMCD+1
3230 '       LDY  ,X++
3240 '       STY  SRAMCD+2
3250 '       PSHS B,X
3260 '       LDY  #SRAMCD+4
3270 'D06LP2 PULU D,X
3280 '       STD  ,Y++
3290 '       STX  ,Y++
3300 '       PULU D
3310 '       STD  ,Y++
3320 '       DEC  ,S
3330 '       BNE  D06LP2
3340 '       PULS B,X
3350 '       CLR  SBSTAT
3360 '       DEC  1,S
3370 '       BNE  D06LP1
3380 '       PULS D,PC
3390 '
3400 '******** DRAW 7 BYTE COMMAND
3410 'DRAW07 EQU  *
3420 '       LDD  ,X++
3430 '       LDU  ,X++
3440 '       PSHS D
3450 'D07LP1 LBSR SUBHLT
3460 '       LDA  ,S
3470 '       STA  SRAMCD
3480 '       LDB  ,X+
3490 '       STB  SRAMCD+1
3500 '       LDY  ,X++
3510 '       STY  SRAMCD+2
3520 '       PSHS B,X
3530 '       LDY  #SRAMCD+4
3540 'D07LP2 PULU D,X
3550 '       STD  ,Y++
3560 '       STX  ,Y++
3570 '       PULU A,X
3580 '       STA  ,Y+
3590 '       STX  ,Y++
3600 '       DEC  ,S
3610 '       BNE  D07LP2
3620 '       PULS B,X
3630 '       CLR  SBSTAT
3640 '       DEC  1,S
3650 '       BNE  D07LP1
3660 '       PULS D,PC
3670 '
3680 '******** DRAW 8 BYTE COMMAND
3690 'DRAW08 EQU  *
3700 '       LDD  ,X++
3710 '       LDU  ,X++
3720 '       PSHS D
3730 'D08LP1 LBSR SUBHLT
3740 '       LDA  ,S
3750 '       STA  SRAMCD
3760 '       LDB  ,X+
3770 '       STB  SRAMCD+1
3780 '       LDY  ,X++
3790 '       STY  SRAMCD+2
3800 '       PSHS B,X
3810 '       LDY  #SRAMCD+4
3820 'D08LP2 PULU D,X
3830 '       STD  ,Y++
3840 '       STX  ,Y++
3850 '       PULU D,X
3860 '       STD  ,Y++
3870 '       STX  ,Y++
3880 '       DEC  ,S
3890 '       BNE  D08LP2
3900 '       PULS B,X
3910 '       CLR  SBSTAT
3920 '       DEC  1,S
3930 '       BNE  D08LP1
3940 '       PULS D,PC
3950 '
3960 '******** DRAW 9 BYTE COMMAND
3970 'DRAW09 EQU  *
3980 '       LDD  ,X++
3990 '       LDU  ,X++
4000 '       PSHS D
4010 'D09LP1 LBSR SUBHLT
4020 '       LDA  ,S
4030 '       STA  SRAMCD
4040 '       LDB  ,X+
4050 '       STB  SRAMCD+1
4060 '       LDY  ,X++
4070 '       STY  SRAMCD+2
4080 '       PSHS B,X
4090 '       LDY  #SRAMCD+4
4100 'D09LP2 PULU D,X
4110 '       STD  ,Y++
4120 '       STX  ,Y++
4130 '       PULU D,X
4140 '       STD  ,Y++
4150 '       STX  ,Y++
4160 '       PULU A
4170 '       STA  ,Y+
4180 '       DEC  ,S
4190 '       BNE  D09LP2
4200 '       PULS B,X
4210 '       CLR  SBSTAT
4220 '       DEC  1,S
4230 '       BNE  D09LP1
4240 '       PULS D,PC
4250 '
4260 '******** DRAW 10 BYTE COMMAND
4270 'DRAW10 EQU  *
4280 '       LDD  ,X++
4290 '       LDU  ,X++
4300 '       PSHS D
4310 'D10LP1 LBSR SUBHLT
4320 '       LDA  ,S
4330 '       STA  SRAMCD
4340 '       LDB  ,X+
4350 '       STB  SRAMCD+1
4360 '       LDY  ,X++
4370 '       STY  SRAMCD+2
4380 '       PSHS B,X
4390 '       LDY  #SRAMCD+4
4400 'D10LP2 PULU D,X
4410 '       STD  ,Y++
4420 '       STX  ,Y++
4430 '       PULU D,X
4440 '       STD  ,Y++
4450 '       STX  ,Y++
4460 '       PULU D
4470 '       STD  ,Y++
4480 '       DEC  ,S
4490 '       BNE  D10LP2
4500 '       PULS B,X
4510 '       CLR  SBSTAT
4520 '       DEC  1,S
4530 '       BNE  D10LP1
4540 '       PULS D,PC
4550 '
4560 '******** INITIALIZE
4570 'INIT   EQU  *
4580 '       PSHS A
4590 '       BSR  PALINI        ; PALETTE INITIALIZE
4600 '       BSR  IRQINI        ; IRQ VECTOR INITIALIZE
4610 '       STA  BANKRG        ; ALL RAM MODE
4620 '       LDA  #DEFSPD
4630 '       STA  SETCNT,PCR    ; SET DEFAULT SPEED
4640 '       CLR  ENDFLG,PCR    ; CLEAR END FLAG
4650 '       CLR  PAUFLG,PCR    ; CLEAR PAUSE FLAG
4660 '       CLR  PTNCNT,PCR    ; CLEAR PATTERN COUNT
4670 '       PULS A,PC
4680 '
4690 '******** PALETTE INITIALIZE
4700 'PALINI EQU  *
4710 '       PSHS A,X
4720 '       LDX  #PALREG
4730 '       CLRA
4740 'PALLP1 STA  ,X+
4750 '       INCA
4760 '       CMPA #$07
4770 '       BLS  PALLP1
4780 '       PULS A,X,PC
4790 '
4800 '******** IRQ VECTOR INITIALIZE
4810 'IRQINI EQU  *
4820 '       ORCC #IRMSKC       ; FIRQ, IRQ MASK
4830 '       PSHS A,X
4840 '       LDX  IRQVCT        ; GET ORIGINAL IRQ VECTOR
4850 '       STX  ORGIRQ,PCR    ; STORE ORIGINAL IRQ VECTOR
4860 '       LEAX IRQPRC,PCR    ; IRQ PROCEDURE
4870 '       STX  IRQVCT        ; SET IRQ VECTOR
4880 '       LDA  #$05          ; SET TIMER, KEY IRQ
4890 '       STA  IRQMSK
4900 '       ANDCC #IRENBC      ; FIRQ MASK, IRQ ENABLE
4910 '       PULS A,X,PC
4920 '
4930 '******** PROGRAM CLOSE
4940 'PCLOSE EQU  *
4950 '       ORCC #IRMSKC       ; FIRQ, IRQ MASK
4960 '       PSHS A,X
4970 '       LDX  ORGIRQ,PCR    ; SET ORIGINAL IRQ VECTOR
4980 '       STX  IRQVCT
4990 '       LDA  #$44          ; SET RxRDY, TIMER IRQ
5000 '       STA  IRQMSK
5010 '       LDA  BANKRG        ; ROM MODE
5020 '       ANDCC #$AF         ; FIRQ,IRQ ENABLE
5030 '       PULS A,X,PC
5040 '
5050 '******** SUB-CPU HALT
5060 'SUBHLT EQU  *
5070 '       PSHS A
5080 'HLTLP1 LDA  SBSTAT
5090 '       BMI  HLTLP1
5100 '       LDA  #$80
5110 '       STA  SBSTAT
5120 'HLTLP2 LDA  SBSTAT
5130 '       BPL  HLTLP2
5140 '       PULS A,PC
5150 '
5160 '******** SUB-CPU ENABLE
5170 'SUBENB EQU  *
5180 '       CLR  SBSTAT
5190 '       RTS
5200 '
5210 '******** SUB PROGRAM CLOSE
5220 'SCLOSE EQU  *
5230 '       ORCC #IRMSKC
5240 '       PSHS A
5250 '       BSR  SUBHLT        ; HALT SUB-SYSTEM
5260 '       LDA  #$40          ; SUB PROGRAM CLOSE COMMAND
5270 '       STA  SRAMCD        ; WRITE COMMAND
5280 '       BSR  SUBENB        ; ENABLE SUB-SYSTEM
5290 '       ANDCC #IRENBC
5300 '       PULS A,PC
5310 '
5320 '******** CLEAR SCREEN
5330 'CLS    EQU  *
5340 '       ORCC #IRMSKC
5350 '       PSHS A
5360 '       LDA  #$70
5370 '       STA  MLTPAG        ; HIDE SCREEN
5380 '       BSR  SUBHLT        ; HALT SUB-SYSTEM
5390 '       LDA  #$42          ; CLS COMMAND
5400 '       STA  SRAMCD        ; WRITE COMMAND
5410 '       BSR  SUBENB        ; ENABLE SUB-SYSTEM
5420 'CLSLP  LDA  SBSTAT        ; WAIT UNTIL READY SUB-SUSTEM
5430 '       BMI  CLSLP
5440 '       CLR  MLTPAG        ; SHOW SCREEN
5450 '       ANDCC #IRENBC
5460 '       PULS A,PC
5470 '
5480 '******** LOAD IMAGE DATA
5490 'LODIMG EQU  *
5500 '       ORCC #$50
5510 '       PSHS X
5520 '       LEAX <TBLFN,PCR    ; LOAD PATERN TABLE
5530 '       BSR  FOPEN
5540 '       LDX  #PTNNUM
5550 '       LBSR READDT
5560 '       JSR  FCLOSE
5570 '       LEAX <IMGFN1,PCR   ; LOAD IMAGE DATA 1
5580 '       BSR  FOPEN
5590 '       LDX  #IMAGE1
5600 '       BSR  READDT
5610 '       JSR  FCLOSE
5620 '       LEAX <IMGFN2,PCR   ; LOAD IMAGE DATA 2
5630 '       BSR  FOPEN
5640 '       LDX  #IMAGE2
5650 '       BSR  READDT
5660 '       JSR  FCLOSE
5670 '       ANDCC #$AF
5680 '       PULS X,PC
5690 '
5700 'TBLFN  FCC  'NUGITBL',$00
5710 'IMGFN1 FCC  'NUGIIMG1',$00
5720 'IMGFN2 FCC  'NUGIIMG2',$00
5730 '
5740 '******** FILE OPEN
5750 '*        X:FILE NAME POINTER (STRING ZERO)
5760 'FOPEN  EQU  *
5770 '       PSHS D,X,U
5780 '       LDD  GRDPTR        ; D <- GENERAL READ POINTER
5790 '       PSHS D
5800 '       LDU  #CSTBUF       ; U <- CASSETE BUFFER
5810 '       PSHS U
5820 '       LDA  #$20          ; STORE SPACE
5830 '       STA  ,U+
5840 '       LDA  #$22          ; STORE DOUBLE QUOTATION
5850 'FOPLP1 STA  ,U+           ; COPY FILE NAME
5860 '       LDA  ,X+
5870 '       BNE  FOPLP1
5880 '       LDA  #$22          ; STORE DOUBLE QUOTATION
5890 '       STA  ,U+
5900 '       CLR  ,U            ; STORE NULL
5910 '       PULS X             ; X <- CASSETE BUFFER
5920 '       STX  GRDPTR        ; X -> GENERAL READ POINTER
5930 '       JSR  SETFND        ; SET FILE NAME AND DEVICE NUMBER
5940 '       PULS D
5950 '       STD  GRDPTR        ; RESTORE GENERAL READ POINTER
5960 '       LDB  #$11          ; $11 : SYSTEM
5970 '       STB  FILNUM        ; SET FILE NUMBER
5980 '       JSR  OPENRD        ; FILE OPEN (READ MODE)
5990 '       LDX  FILTYP        ; GET FILE TYPE AND ASCII FLAG
6000 '       CMPX #$01FF        ; CHECK BASIC DATA AND ASCII
6010 '       BEQ  FOPJP1
6020 '       LDB  #$33          ; SET ERROR CODE
6030 'ERROR  JMP  ERRPRC        ; JUMP ERROR ROUTINE
6040 '
6050 'FOPJP1 JSR  FILCHK        ; FILE CHECK ROUTINE
6060 '       BMI  FOPJP2
6070 '       LDB  #$3C          ; SET ERROR CODE
6080 '       BRA  ERROR         ; JUMP ERROR ROUTINE
6090 '
6100 'FOPJP2 PULS D,X,U,PC
6110 '
6120 '******** READ DATA FROM FILE
6130 '*        X : STORE DATA POINTER
6140 'READDT EQU  *
6150 '       PSHS A,X
6160 'RDLP1  JSR  READ1B        ; READ 1 BYTE
6170 '       TST  DATEND        ; CHECK READ DATA END FLAG
6180 '       BNE  RDJP1
6190 '       STA  BANKRG        ; SELECT RAM MODE
6200 '       STA  ,X+           ; STORE DATA
6210 '       LDA  BANKRG        ; SELECT ROM MODE
6220 '       BRA  RDLP1
6230 '
6240 'RDJP1  PULS A,X,PC
6250 '
6260 '******** SUB-PROGRAM EXECUTE
6270 'SUBEXE EQU  *
6280 '       ORCC #IRMSKC
6290 '       PSHS D,X,Y,U
6300 '       LBSR SUBHLT
6310 '       LEAX <EXEPRG,PCR
6320 '       LDU  #SRAMCD
6330 '       LDB  #EXEEND-EXEPRG
6340 'SEXELP LDA  ,X+
6350 '       STA  ,U+
6360 '       DECB
6370 '       BNE  SEXELP
6380 '       LBSR SUBENB
6390 '       ANDCC #IRENBC
6400 '       PULS D,X,Y,U,PC
6410 '
6420 'EXEPRG EQU  *
6430 '       FCC  '?NAKAYAMA'
6440 '       FCB  $93           ; JUMP SUB PROGRAM
6450 '       FDB  CONBUF
6460 '       FCB  $90
6470 'EXEEND EQU  *
6480 '
6490 '******** TRANSFER TO SUB-SYSTEM
6500 'SUBTRF EQU  *
6510 '       ORCC #$50
6520 '       PSHS D,X,Y,U
6530 '       LDD  #SSRAMC
6540 '       ADDD #TRFEND-TRFPRG
6550 '       STD  <SRCADD,PCR
6560 '       LDD  #CONBUF
6570 '       STD  <DSTADD,PCR
6580 '       LEAY <SUBPRG,PCR
6590 '       LDD  #SUBEND-SUBPRG
6600 'STRLP1 PSHS D
6610 '       LBSR SUBHLT
6620 '       LEAX <TRFPRG,PCR
6630 '       LDU  #SRAMCD
6640 '       LDB  #TRFEND-TRFPRG
6650 'STRLP2 LDA  ,X+            ; COPY TRANSFER SUBROUTINE
6660 '       STA  ,U+
6670 '       DECB
6680 '       BNE  STRLP2
6690 '       LDB  #TRSIZE
6700 'STRLP3 LDA  ,Y+            ; COPY SUB-PROGRAM DIVIDED 64 BYTES
6710 '       STA  ,U+
6720 '       DECB
6730 '       BNE  STRLP3
6740 '       LBSR SUBENB
6750 '       LDD  <DSTADD,PCR
6760 '       ADDD #TRSIZE
6770 '       STD  <DSTADD,PCR
6780 '       PULS D
6790 '       SUBD #TRSIZE
6800 '       BPL  STRLP1         ; COPY NEXT 64 BYTES
6810 '       ANDCC #$AF
6820 '       PULS D,X,Y,U,PC
6830 '
6840 'TRFPRG EQU  *
6850 '       FCC  '?NAKAYAMA'
6860 '       FCB  $91            ; MOVE SUB PROGRAM TO CONSOL BUFFER
6870 'SRCADD FDB  SSRAMC
6880 'DSTADD FDB  CONBUF
6890 '       FDB  TRSIZE
6900 '       FCB  $90
6910 'TRFEND EQU  *
6920 '
6930 'SUBPRG EQU  *
6940 '
6950 '******* COMMAND CALL
6960 'CMDENT EQU  *
6970 '       CLR  SSRAMC        ; CLEAR COMMAND CODE
6980 '       STB  INSFLG        ; INS LED OFF
6990 '       LDB  BSYFLG        ; SUB-SYSTEM REDAY
7000 'CMDWAT LDA  SSRAMC        ; GET COMMNAD CODE
7010 '       BEQ  CMDWAT
7020 '       STB  BSYFLG        ; SUB-SYSTEM BUSY
7030 '       LDB  INSFLG        ; INS LED ON
7040 '       SUBA #$40
7050 '       ASLA
7060 '       LEAX <JMPTBL,PCR
7070 '       LDD  A,X
7080 '       JSR  D,X           ; CALL SUBROUTINE
7090 '       BRA  CMDENT
7100 '
7110 'JMPTBL EQU  *
7120 '       FDB  SCLSC-JMPTBL  ;$40
7130 '       FDB  TEST-JMPTBL   ;$41
7140 '       FDB  CLSC-JMPTBL   ;$42
7150 '       FDB  SDRW03-JMPTBL ;$43
7160 '       FDB  SDRW04-JMPTBL ;$44
7170 '       FDB  CMDWAT-JMPTBL ;$45
7180 '       FDB  SDRW06-JMPTBL ;$46
7190 '       FDB  SDRW07-JMPTBL ;$47
7200 '       FDB  SDRW08-JMPTBL ;$48
7210 '       FDB  SDRW09-JMPTBL ;$49
7220 '       FDB  SDRW10-JMPTBL ;$4A
7230 '
7240 '******* TEST COMMAND
7250 'TEST   JSR  [SSRAMC+1]    ; CALL SUBROUTINE [$D383]
7260 '       RTS
7270 '
7280 '******* CLOSE COMMAND
7290 'SCLSC  LEAX <ERSPRG,PCR   ; TRANSFER CLOSE SUBROUTINE TO SUB WORK AREA
7300 '       LDU  #SUBWRK
7310 '       LDB  #ERSEND-ERSPRG
7320 'ENDLP  LDA  ,X+
7330 '       STA  ,U+
7340 '       DECB
7350 '       BNE  ENDLP
7360 '       JMP  SUBWRK        ; JUMP TO CLOSE SUBROUTINE
7370 '
7380 'ERSPRG LDX  #CONBUF       ; ERASE CONSOL BUFFER
7390 '       LDD  #$0000
7400 'ERSLP  STD  ,X++
7410 '       CMPX #STACK
7420 '       BNE  ERSLP
7430 '       STB  INSFLG        ; INS LED OFF
7440 '       JMP  CMDCTL        ; JUMP TO COMMAND HANDLER
7450 'ERSEND EQU  *
7460 '
7470 '******** CLEAR SCREEN COMMAND
7480 'CLSC   EQU  *
7490 '       LDU  #$BE80        ; GREEN VRAM CLEAR
7500 '       BSR  FLVRAM
7510 '       LDU  #$7E80        ; RED VRAM CLEAR
7520 '       BSR  FLVRAM
7530 '       LDU  #$3E80        ; BULE VRAM CLEAR
7540 'FLVRAM LDB  #$64
7550 '       PSHS B
7560 '       LDD  #$0000
7570 '       LDX  #$0000
7580 '       BITA VRAMAC
7590 '       LEAY ,X
7600 'CLSLP1 PSHU D,X,Y
7610 '       PSHU D,X,Y
7620 '       PSHU D,X,Y
7630 '       PSHU D,X,Y
7640 '       PSHU D,X,Y
7650 '       PSHU D,X,Y
7660 '       PSHU D,X,Y
7670 '       PSHU D,X,Y
7680 '       PSHU D,X,Y
7690 '       PSHU D,X,Y
7700 '       PSHU D,X,Y
7710 '       PSHU D,X,Y
7720 '       PSHU D,X,Y
7730 '       PSHU D,X,Y
7740 '       PSHU D,X,Y
7750 '       PSHU D,X,Y
7760 '       PSHU D,X,Y
7770 '       PSHU D,X,Y
7780 '       PSHU D,X,Y
7790 '       PSHU D,X,Y
7800 '       PSHU D,X,Y
7810 '       PSHU D,X,Y
7820 '       PSHU D,X,Y
7830 '       PSHU D,X,Y
7840 '       PSHU D,X,Y
7850 '       PSHU D,X,Y
7860 '       PSHU X,Y
7870 '       DEC  ,S
7880 '       BNE  CLSLP1
7890 '       STA  VRAMAC
7900 '       PULS B,PC
7910 '
7920 '******** DRAW 3 BYTE COMMAND
7930 '*        SSRAMC+1: LINES, SSRAMC+2:ADDRESS
7940 'SDRW03 EQU  *
7950 '       LDB  SSRAMC+1
7960 '       LDY  SSRAMC+2
7970 '       LDU  #SSRAMC+4
7980 '       PSHS B
7990 'DWLP03 PULU A,X
8000 '       BITA VRAMAC
8010 '       NOP
8020 '       STA  ,Y+
8030 '       STX  ,Y++
8040 '       STA  VRAMAC
8050 '       LEAY $50-3,Y
8060 '       DEC  ,S
8070 '       BNE  DWLP03
8080 '       PULS B,PC
8090 '
8100 '******** DRAW 4 BYTE COMMAND
8110 'SDRW04 EQU  *
8120 '       LDB  SSRAMC+1
8130 '       LDY  SSRAMC+2
8140 '       LDU  #SSRAMC+4
8150 '       PSHS B
8160 'DWLP04 PULU D,X
8170 '       BITA VRAMAC
8180 '       NOP
8190 '       STD  ,Y++
8200 '       STX  ,Y++
8210 '       STA  VRAMAC
8220 '       LEAY $50-4,Y
8230 '       DEC  ,S
8240 '       BNE  DWLP04
8250 '       PULS B,PC
8260 '
8270 '******** DRAW 6 BYTE COMMAND
8280 'SDRW06 EQU  *
8290 '       LDB  SSRAMC+1
8300 '       LDY  SSRAMC+2
8310 '       LDU  #SSRAMC+4
8320 '       PSHS B
8330 'DWLP06 PULU D,X
8340 '       BITA VRAMAC
8350 '       NOP
8360 '       STD  ,Y++
8370 '       STX  ,Y++
8380 '       PULU D
8390 '       STD  ,Y++
8400 '       STA  VRAMAC
8410 '       LEAY $50-6,Y
8420 '       DEC  ,S
8430 '       BNE  DWLP06
8440 '       PULS B,PC
8450 '
8460 '******** DRAW 7 BYTE COMMAND
8470 'SDRW07 EQU  *
8480 '       LDB  SSRAMC+1
8490 '       LDY  SSRAMC+2
8500 '       LDU  #SSRAMC+4
8510 '       PSHS B
8520 'DWLP07 PULU D,X
8530 '       BITA VRAMAC
8540 '       NOP
8550 '       STD  ,Y++
8560 '       STX  ,Y++
8570 '       STA  VRAMAC
8580 '       PULU A,X
8590 '       BITA VRAMAC
8600 '       NOP
8610 '       STA  ,Y+
8620 '       STX  ,Y++
8630 '       STA  VRAMAC
8640 '       LEAY $50-7,Y
8650 '       DEC  ,S
8660 '       BNE  DWLP07
8670 '       PULS B,PC
8680 '
8690 '******** DRAW 8 BYTE COMMAND
8700 'SDRW08 EQU  *
8710 '       LDB  SSRAMC+1
8720 '       LDY  SSRAMC+2
8730 '       LDU  #SSRAMC+4
8740 '       PSHS B
8750 'DWLP08 PULU D,X
8760 '       BITA VRAMAC
8770 '       NOP
8780 '       STD  ,Y++
8790 '       STX  ,Y++
8800 '       STA  VRAMAC
8810 '       PULU D,X
8820 '       BITA VRAMAC
8830 '       NOP
8840 '       STD  ,Y++
8850 '       STX  ,Y++
8860 '       STA  VRAMAC
8870 '       LEAY $50-8,Y
8880 '       DEC  ,S
8890 '       BNE  DWLP08
8900 '       PULS B,PC
8910 '
8920 '******** DRAW 9 BYTE COMMAND
8930 'SDRW09 EQU  *
8940 '       LDB  SSRAMC+1
8950 '       LDY  SSRAMC+2
8960 '       LDU  #SSRAMC+4
8970 '       PSHS B
8980 'DWLP09 PULU D,X
8990 '       BITA VRAMAC
9000 '       NOP
9010 '       STD  ,Y++
9020 '       STX  ,Y++
9030 '       STA  VRAMAC
9040 '       PULU D,X
9050 '       BITA VRAMAC
9060 '       NOP
9070 '       STD  ,Y++
9080 '       STX  ,Y++
9090 '       PULU A
9100 '       STA  ,Y+
9110 '       STA  VRAMAC
9120 '       LEAY $50-9,Y
9130 '       DEC  ,S
9140 '       BNE  DWLP09
9150 '       PULS B,PC
9160 '
9170 '******** DRAW 10 BYTE COMMAND
9180 'SDRW10 EQU  *
9190 '       LDB  SSRAMC+1
9200 '       LDY  SSRAMC+2
9210 '       LDU  #SSRAMC+4
9220 '       PSHS B
9230 'DWLP10 PULU D,X
9240 '       BITA VRAMAC
9250 '       NOP
9260 '       STD  ,Y++
9270 '       STX  ,Y++
9280 '       STA  VRAMAC
9290 '       PULU D,X
9300 '       BITA VRAMAC
9310 '       NOP
9320 '       STD  ,Y++
9330 '       STX  ,Y++
9340 '       PULU D
9350 '       STD  ,Y++
9360 '       STA  VRAMAC
9370 '       LEAY $50-10,Y
9380 '       DEC  ,S
9390 '       BNE  DWLP10
9400 '       PULS B,PC
9410 '
9420 'SUBEND EQU  *
9430 '
9440 '       END
9450 '
9460 '* PROGRAMMED BY T.NAKAYAMA, 2006/11/11
